package br.com.unip.persistencia;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.unip.modelo.Funcionario;

public class FuncionarioDao extends Dao {
	public void gravar(Funcionario f) throws Exception {
		abrirBanco();
		String query = "INSERT INTO func (nome, dta_nasc, salario, nro_depto, cod_superv) VALUES (?, ?, ?, ?, ?)";
		pstmt = con.prepareStatement(query);
		System.out.println("Comando SQL => " + pstmt);
		pstmt.setString(1, f.getNome());
		pstmt.setDate(2, f.getDataNascimento());
		pstmt.setFloat(3, f.getSalario());
		pstmt.setInt(4, f.getNumeroDepartamento());
		pstmt.setInt(5, f.getCodigoSupervisor());
		pstmt.execute();
		fecharBanco();
	}
	
	public void atualizar(Funcionario f) throws Exception {
		abrirBanco();
		String query = "UPDATE func SET nome = ?, dta_nasc = ?, salario = ?, nro_depto = ?, cod_superv = ? WHERE cod_func = ?";
		pstmt = con.prepareStatement(query);
		System.out.println("Comando SQL => " + pstmt);
		pstmt.setString(1, f.getNome());
		pstmt.setDate(2, f.getDataNascimento());
		pstmt.setFloat(3, f.getSalario());
		pstmt.setInt(4, f.getNumeroDepartamento());
		pstmt.setInt(5, f.getCodigoSupervisor());
		pstmt.setInt(6, f.getCod_func());
		pstmt.execute();
		fecharBanco();
	}
	
	public void deletar(int id) throws Exception {
		abrirBanco();
		String query = "DELETE FROM func WHERE func.cod_func = ?";
		pstmt = con.prepareStatement(query);
		System.out.println("Comando SQL => " + pstmt);
		pstmt.setInt(1, id);
		pstmt.execute();
		fecharBanco();
	}
	
	public Funcionario buscarPorId(Integer id) throws Exception {
		abrirBanco();
		String query = "SELECT * FROM func WHERE func.cod_func = ?";
		pstmt = con.prepareStatement(query);
		System.out.println("Comando SQL => " + pstmt);
		pstmt.setInt(1, id);
		ResultSet rs = pstmt.executeQuery();
		Funcionario f = new Funcionario();
		if(rs.next()) {
			f.setCod_func(rs.getInt("cod_func"));
			f.setNome(rs.getString("nome"));
			f.setDataNascimento(rs.getDate("dta_nasc"));
			f.setSalario(rs.getFloat("salario"));
			f.setNumeroDepartamento(rs.getInt("nro_depto"));
			f.setCodigoSupervisor(rs.getInt("cod_superv"));
		}
		fecharBanco();
		return f;
	}
	
	public List<Funcionario> listar() throws Exception {
		abrirBanco();
		String query = "SELECT * FROM func";
		pstmt = con.prepareStatement(query);
		System.out.println("Comando SQL => " + pstmt);
		ResultSet rs = pstmt.executeQuery();
		Funcionario f = null;
		List<Funcionario> listar = new ArrayList<Funcionario>();
		while (rs.next()) {
			f = new Funcionario();
			f.setCod_func(rs.getInt("cod_func"));
			f.setNome(rs.getString("nome"));
			f.setDataNascimento(rs.getDate("dta_nasc"));
			f.setSalario(rs.getFloat("salario"));
			f.setNumeroDepartamento(rs.getInt("nro_depto"));
			f.setCodigoSupervisor(rs.getInt("cod_superv"));
			listar.add(f);
		}
		fecharBanco();
		return listar;
	}
}